package com.med.service.impl;

import com.med.entity.CustomerMessageDO;
import com.med.entity.DoctorMessageDO;
import com.med.entity.SessionDO;
import com.med.mapper.CustomerMessageMapper;
import com.med.mapper.DoctorMessageMapper;
import com.med.mapper.SessionMapper;
import com.med.service.IChatService;
import com.med.vo.CustomerMessageVO;
import com.med.vo.DoctorMessageVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Collections;
import java.util.List;
import java.util.UUID;

/**
 * Project:internet-based-healthcare
 * Package:com.med.service.impl
 *
 * @Description:
 * @Author:其一
 * @CreateTime: 2025-08-25-15-19
 */
@Service
public class ChatServiceImpl implements IChatService {

    @Autowired
    private SessionMapper sessionMapper;

    @Autowired
    private DoctorMessageMapper doctorMessageMapper;

    @Autowired
    private CustomerMessageMapper customerMessageMapper;

    @Override
    public Integer createSession() {
        return sessionMapper.insertSession();
    }

    @Override
    public boolean endSession(Integer sessionId) {
        if (sessionId == null) {
            return false;
        }
        // 先验证会话是否存在
        SessionDO sessionDO = sessionMapper.selectSessionById(sessionId);
        if (sessionDO == null) {
            return false;
        }
        // 更新状态为1（已结束）
        return sessionMapper.updateSessionStatus(sessionId, 1) > 0;
    }

    @Override
    public SessionDO checkSessionValid(Integer sessionId) {
        if (sessionId == null) {
            return null;
        }
        SessionDO sessionDO = sessionMapper.selectSessionById(sessionId);
        // 会话存在且状态为0（活跃）才有效
        return (sessionDO != null && sessionDO.getSessionStatus() == 0) ? sessionDO : null;
    }

    @Override
    public void saveDoctorMessage(DoctorMessageDO doctorMessageDO) {
        // 1. 生成UUID作为消息ID（避免重复）
        doctorMessageDO.setDoctorMessageId(UUID.randomUUID().toString().replace("-", ""));
        // 2. 保存消息到数据库
        doctorMessageMapper.insertDoctorMessage(doctorMessageDO);
    }

    @Override
    public List<DoctorMessageDO> getDoctorMsgPage(DoctorMessageVO doctorMessageVO) {
        // 1. 验证会话是否有效
        SessionDO sessionDO = checkSessionValid(doctorMessageVO.getDoctorSessionId());
        if (sessionDO == null) {
            return null;
        }
        List<DoctorMessageDO> doctorMessageDOS = doctorMessageMapper.selectBySessionId(doctorMessageVO.getDoctorSessionId());
        return doctorMessageDOS;
    }

    @Override
    public void saveCustomerMessage(CustomerMessageDO customerMessageDO) {
        // 1. 生成UUID作为消息ID
        customerMessageDO.setCustomerMessageId(UUID.randomUUID().toString().replace("-", ""));
        // 2. 保存消息到数据库
        customerMessageMapper.insertCustomerMessage(customerMessageDO);
    }

    @Override
    public List<CustomerMessageDO> getCustomerMsgPage(CustomerMessageVO customerMessageVO) {
        // 1. 验证会话是否有效
        SessionDO sessionDO = checkSessionValid(customerMessageVO.getCustomerSessionId());
        if (sessionDO == null) {
            return null;
        }
        List<CustomerMessageDO> customerMessageDOS = customerMessageMapper.selectBySessionId(customerMessageVO.getCustomerSessionId());
        return customerMessageDOS;
    }
}
